import path from 'path-browserify'

// 判断数据是否为空
function isNull(data) {
    return (!data || (typeof data === 'object' && Object.keys(data).length === 0))
}
// 获取所有子路由的数组
const getChildrenRoutes = (routes) => {
    return routes.flatMap(route => route.children || [])
}

// 过滤掉所有存在顶层路由的子路由
export const filterRouters = (routes) => {
    const childrenRoutes = getChildrenRoutes(routes)
    return routes.filter(route => 
        !childrenRoutes.some(child => child.path === route.path)
    )
}

// 得到路由===>导航菜单的映射
/**
 * 从路由配置中生成菜单结构
 * @param {Array} routes - 路由配置数组
 * @param {string} basePath - 基础路径，用于解析相对路径
 * @returns {Array} 菜单结构数组
 */
export function getMenus(routes, basePath = '') {
    const result = [] // 存储最终生成的菜单项
    // 遍历每个路由项
    routes.forEach(item => {
        const { meta, children } = item
        
        // 情况1: 如果没有meta信息且没有子路由，跳过该路由（不显示在菜单中）
        if (isNull(meta) && isNull(children)) {
            return
        }
        
        // 情况2: 如果没有meta信息但有子路由，递归处理子路由
        if (isNull(meta) && !isNull(children)) {
            result.push(getMenus(children, basePath))
            return
        }
        // 解析当前路由的完整路径
        const routePath = path.resolve(basePath, item.path)
        // 检查是否已存在相同路径的菜单项（避免重复）
        let existingRoute = result.find(r => r.path === routePath)
        
        // 如果不存在，创建新的菜单项
        if (!existingRoute) {
            existingRoute = {
                ...item,           // 保留原始路由的所有属性
                path: routePath,   // 使用解析后的完整路径
                children: []       // 初始化子菜单数组
            }
            
            // 只有同时有标题和图标的路由才显示在菜单中
            if (meta.title && meta.icon) {
                result.push(existingRoute)
            }
        }
        
        // 如果有子路由，递归处理并添加到当前菜单项的子菜单中
        if (children) {
            existingRoute.children.push(...getMenus(children, routePath))
        }
    })
    
    return result
}


